Game xếp hình Tetris C#

1 using System;
2
3 namespace
Tetris
4 {

5     ///
<summary>
6     ///
Descripción breve de Tetris.
7     ///
</summary>
8     
public class Tetris
9     {
10         
private Pieza [] m_matrizPiezas;
11         
private MatrizPantalla m_matrizPantalla;
12         
private Pieza m_piezaActual;
13         
private Pieza m_piezaSiguiente;
14         
private bool m_juegoTerminado;
15         
private int m_puntuacion;
16         
private int m_nivel;
17         
private int m_numLineas;
18         
private Random r;
19             
20         
#region Constructor
21         
public Tetris()
22         {
23             m_matrizPantalla =
new MatrizPantalla();
24             m_matrizPiezas =
new Pieza[Constantes.NUM_PIEZAS];
25             
string formaPieza1 = "";
26             
string formaPieza2 = "";
27             
string formaPieza3 = "";
28             
string formaPieza4 = "";
29
30             
// **
31             
// Pieza **
32             
// Observacion: Esa Pieza no Rota
33             formaPieza1 +=
"1100";
34             formaPieza1 +=
"1100";
35             formaPieza1 +=
"0000";
36             formaPieza1 +=
"0000";
37
38             m_matrizPiezas[
0] = new Pieza(formaPieza1, formaPieza1, formaPieza1, formaPieza1, 7);
39
40             
//
41             
// Pieza ****
42             
// Observacion: Esa Pieza solo tiene 2 posiciones
43             formaPieza1 =
"";
44             formaPieza1 +=
"1000";
45             formaPieza1 +=
"1000";
46             formaPieza1 +=
"1000";
47             formaPieza1 +=
"1000";
48             
49             formaPieza2 =
"";
50             formaPieza2 +=
"0000";
51             formaPieza2 +=
"1111";
52             formaPieza2 +=
"0000";
53             formaPieza2 +=
"0000";
54
55             m_matrizPiezas[
1] = new Pieza(formaPieza1, formaPieza2, formaPieza1, formaPieza2, 1);
56
57             
// *
58             
// Pieza ***
59             formaPieza1 =
"";
60             formaPieza1 +=
"1100";
61             formaPieza1 +=
"1000";
62             formaPieza1 +=
"1000";
63             formaPieza1 +=
"0000";
64
65             formaPieza2 =
"";
66             formaPieza2 +=
"1110";
67             formaPieza2 +=
"0010";
68             formaPieza2 +=
"0000";
69             formaPieza2 +=
"0000";
70
71             formaPieza3 =
"";
72             formaPieza3 +=
"0100";
73             formaPieza3 +=
"0100";
74             formaPieza3 +=
"1100";
75             formaPieza3 +=
"0000";
76
77             formaPieza4 =
"";
78             formaPieza4 +=
"1000";
79             formaPieza4 +=
"1110";
80             formaPieza4 +=
"0000";
81             formaPieza4 +=
"0000";
82             m_matrizPiezas[
2] = new Pieza(formaPieza1, formaPieza2, formaPieza3, formaPieza4, 2);
83
84             
// *
85             
// Pieza ***
86             formaPieza1 =
"";
87             formaPieza1 +=
"1000";
88             formaPieza1 +=
"1100";
89             formaPieza1 +=
"1000";
90             formaPieza1 +=
"0000";
91
92             formaPieza2 =
"";
93             formaPieza2 +=
"1110";
94             formaPieza2 +=
"0100";
95             formaPieza2 +=
"0000";
96             formaPieza2 +=
"0000";
97
98             formaPieza3 =
"";
99             formaPieza3 +=
"0100";
100             formaPieza3 +=
"1100";
101             formaPieza3 +=
"0100";
102             formaPieza3 +=
"0000";
103
104             formaPieza4 =
"";
105             formaPieza4 +=
"0100";
106             formaPieza4 +=
"1110";
107             formaPieza4 +=
"0000";
108             formaPieza4 +=
"0000";
109             m_matrizPiezas[
3] = new Pieza(formaPieza1, formaPieza2, formaPieza3, formaPieza4, 3);
110
111             
// **
112             
// Pieza **
113             
// Observacion: Esa formaPieza solo tiene 2 posiciones
114             formaPieza1 =
"";
115             formaPieza1 +=
"0110";
116             formaPieza1 +=
"1100";
117             formaPieza1 +=
"0000";
118             formaPieza1 +=
"0000";
119
120             formaPieza2 =
"";
121             formaPieza2 +=
"1000";
122             formaPieza2 +=
"1100";
123             formaPieza2 +=
"0100";
124             formaPieza2 +=
"0000";
125             m_matrizPiezas[
4] = new Pieza(formaPieza1, formaPieza2, formaPieza1, formaPieza2, 4);
126
127             
// **
128             
// Pieza **
129             
// Observacion: Esa formaPieza solo tiene 2 posiciones
130             formaPieza1 =
"";
131             formaPieza1 +=
"1100";
132             formaPieza1 +=
"0110";
133             formaPieza1 +=
"0000";
134             formaPieza1 +=
"0000";
135
136             formaPieza2 =
"";
137             formaPieza2 +=
"0100";
138             formaPieza2 +=
"1100";
139             formaPieza2 +=
"1000";
140             formaPieza2 +=
"0000";
141
142             m_matrizPiezas[
5] = new Pieza(formaPieza1, formaPieza2, formaPieza1, formaPieza2, 5);
143
144             
// *
145             
// Pieza ***
146             formaPieza1 =
"";
147             formaPieza1 +=
"1100";
148             formaPieza1 +=
"0100";
149             formaPieza1 +=
"0100";
150             formaPieza1 +=
"0000";
151
152             formaPieza2 =
"";
153             formaPieza2 +=
"1110";
154             formaPieza2 +=
"1000";
155             formaPieza2 +=
"0000";
156             formaPieza2 +=
"0000";
157
158             formaPieza3 =
"";
159             formaPieza3 +=
"1000";
160             formaPieza3 +=
"1000";
161             formaPieza3 +=
"1100";
162             formaPieza3 +=
"0000";
163
164             formaPieza4 =
"";
165             formaPieza4 +=
"0010";
166             formaPieza4 +=
"1110";
167             formaPieza4 +=
"0000";
168             formaPieza4 +=
"0000";
169             m_matrizPiezas[
6] = new Pieza(formaPieza1, formaPieza2, formaPieza3, formaPieza4, 6);
170             
171             r =
new Random(unchecked((int)DateTime.Now.Ticks));
172             
//nuevoJuego();
173             m_juegoTerminado =
true;
174         }
175         
#endregion
176
177                      
178         
public int [, ]matrizPantalla
179         {
180             
get
181             {
182                 
return m_matrizPantalla.matrizPantalla;
183             }
184         }
185
186         
public bool juegoTerminado
187         {
188             
get
189             {
190                 
return m_juegoTerminado;
191             }
192         }
193
194         
public Pieza piezaSiguiente
195         {
196             
get
197             {
198                 
return m_piezaSiguiente;
199             }
200         }
201
202         
public int puntuacion
203         {
204             
get
205             {
206                 
return m_puntuacion;
207             }
208         }
209
210         
public int numLineas
211         {
212             
get
213             {
214                 
return m_numLineas;
215             }
216         }
217
218         
public int nivel
219         {
220             
get
221             {
222                 
return m_nivel;
223             }
224         }
225
226         
private Pieza nuevaPieza()
227         {
228             
int a = r.Next(0, Constantes.NUM_PIEZAS);
229             Pieza p = (Pieza)((Pieza)m_matrizPiezas[a]).Clone();
230             
return p;
231         }
232
233         
public void muevePiezaAbajo()
234         {
235             
int numLineasHechas;
236             Pieza pTemp = (Pieza)m_piezaActual.Clone();
237             m_matrizPantalla.borrarPieza(m_piezaActual);
238             pTemp.posY = pTemp.posY +
1;
239             
if (m_matrizPantalla.puedeBajarPieza(pTemp))
240             {
241                 m_piezaActual = pTemp;
242             }
243             
else
244             {
245                 m_matrizPantalla.pintarPieza(m_piezaActual);
246                 m_piezaActual = m_piezaSiguiente;
247                 
if (!m_matrizPantalla.puedeBajarPieza(m_piezaActual) && m_piezaActual.posY < 0)
248                 {
249                     m_juegoTerminado =
true;
250                 }
251                 m_piezaSiguiente = nuevaPieza();
252                 m_puntuacion +=
4;
253                 numLineasHechas = compruebaLineasCompletas();
254                 
if (numLineasHechas > 0)
255                     m_puntuacion += calculaPuntuacion(numLineasHechas);
256                 m_numLineas += numLineasHechas;
257
258             }
259             
if (!m_juegoTerminado)
260                 m_matrizPantalla.pintarPieza(m_piezaActual);
261         }
262
263         
public void muevePiezaDerecha()
264         {
265             Pieza pTemp = (Pieza)m_piezaActual.Clone();
266             m_matrizPantalla.borrarPieza(m_piezaActual);
267             pTemp.posX = pTemp.posX +
1;
268             
if (m_matrizPantalla.puedeMoverPieza(pTemp))
269             {
270                 m_piezaActual = pTemp;
271             }
272             m_matrizPantalla.pintarPieza(m_piezaActual);
273         }
274
275         
public void muevePiezaIzquierda()
276         {
277             Pieza pTemp = (Pieza)m_piezaActual.Clone();
278             m_matrizPantalla.borrarPieza(m_piezaActual);
279             pTemp.posX = pTemp.posX -
1;
280             
if (m_matrizPantalla.puedeMoverPieza(pTemp))
281             {
282                 m_piezaActual = pTemp;
283             }
284             m_matrizPantalla.pintarPieza(m_piezaActual);
285         }
286
287         
public void rotaPiezaIzquierda()
288         {
289             Pieza pTemp = (Pieza)m_piezaActual.Clone();
290             m_matrizPantalla.borrarPieza(m_piezaActual);
291             pTemp.rotarIzquierda();
292             
if (m_matrizPantalla.puedeMoverPieza(pTemp))
293             {
294                 m_piezaActual = pTemp;
295             }
296             m_matrizPantalla.pintarPieza(m_piezaActual);
297         }
298
299         
public void rotaPiezaDerecha()
300         {
301             Pieza pTemp = (Pieza)m_piezaActual.Clone();
302             m_matrizPantalla.borrarPieza(m_piezaActual);
303             pTemp.rotarDerecha();
304             
if (m_matrizPantalla.puedeMoverPieza(pTemp))
305             {
306                 m_piezaActual = pTemp;
307             }
308             m_matrizPantalla.pintarPieza(m_piezaActual);
309         }
310
311         
public void nuevoJuego()
312         {
313             m_puntuacion =
0;
314             m_numLineas =
0;
315             m_nivel =
0;
316             inicializa();
317         }
318
319         
public void nuevoNivel()
320         {
321             
if (m_nivel < 9)
322                 m_nivel++;
323             m_numLineas =
0;
324             inicializa();
325         }
326
327         
public void inicializa()
328         {
329             m_matrizPantalla.borrarPantalla();
330             m_piezaActual = nuevaPieza();
331             System.Threading.Thread.Sleep(
100); // Retardo para que no salgan las dos primeras piezas iguales
332             m_piezaSiguiente = nuevaPieza();
333             m_matrizPantalla.pintarPieza(m_piezaActual);
334             m_juegoTerminado =
false;
335         }
336
337         
private int compruebaLineasCompletas()
338         {
339             
return m_matrizPantalla.eliminaLineasCompletas();
340         }
341
342         
private int calculaPuntuacion(int numLineasHechas)
343         {
344             
int puntuacion = 0;
345             
switch (numLineasHechas)
346             {
347                 
case 1:
348                     puntuacion +=
13 * (m_nivel + 1) * 2;
349                     
break;
350                 
case 2:
351                     puntuacion +=
2 * 13 * (m_nivel + 1) * 2;
352                     
goto case 1;
353                 
case 3:
354                     puntuacion +=
3 * 13 * (m_nivel + 1) * 2;
355                     
goto case 2;
356                 
case 4:
357                     puntuacion +=
4 * 13 * (m_nivel + 1) * 2;
358                     
goto case 3;
359             }
360             
return puntuacion;
361         }
362
363         
#region Pruebas
364 /*
365         
public void prueba()
366         {
367             
int color = 1;
368             
for (int i = 0; i < 4; i++)
369             {
370                 
for (int j = 0; j < 3; j++)
371                 {
372                     color++;
373                     
if (color > 7)
374                         color =
1;
375                     
for (int k = 0; k < Constantes.FILAS_PIEZAS; k++)
376                     {
377                         
for (int l = 0; l < Constantes.COLUMNAS_PIEZAS; l++)
378                         {
379                             m_matrizPantalla[(i *
4) + k + i, (j * 4) + l] = ((Pieza)m_matrizPiezas[i, j])[k, l] * color;
380                         }
381                     }
382                 }
383             }
384         }
385 */

386         
#endregion
387     }
388 }



Game xếp hình Tetris C# 5.867 lượt xem

Gõ tìm kiếm nhanh...